<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>66. 加一</title>
  </head>
  <body>
    <script>
      //     给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。

      // 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。

      // 你可以假设除了整数 0 之外，这个整数不会以零开头。

      //

      // 示例 1：

      // 输入：digits = [1,2,3]
      // 输出：[1,2,4]
      // 解释：输入数组表示数字 123。
      // 示例 2：

      // 输入：digits = [4,3,2,1]
      // 输出：[4,3,2,2]
      // 解释：输入数组表示数字 4321。
      // 示例 3：

      // 输入：digits = [0]
      // 输出：[1]

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/plus-one
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {number[]} digits
       * @return {number[]}
       */
      var plusOne = function (digits) {
        // console.log(digits.join(''))
        // let num = bigInt(digits.join('') - 0 + 1) + '' // 会溢出
        // return num.split('')
        const length = digits.length
        digits[length - 1] = digits[length - 1] + 1
        for (let i = length - 1; i >= 0; i--) {
          if (digits[i] == 10) {
            digits[i] = 0
            if (i != 0) {
              digits[i - 1] = digits[i - 1] + 1
            } else {
              digits.unshift(1)
            }
          }
        }
        return digits
      }

      console.log(plusOne([6, 1, 4, 5, 3, 9, 0, 1, 9, 5, 1, 8, 6, 7, 0, 5, 5, 4, 3]))
    </script>
  </body>
</html>
